Cosense のページ内 ToC を自動生成するブックマークレット
任意のCosense ページ内の [*** ] および [** ] をすべてリストアップし、それぞれ大項目、小項目として連番を自動付与した ToC を生成するブックマークレット code:javascript
javascript:(function(){const C={S:".line",H2:".level-3",H3:".level-2",T:".line-title"};const t=document.querySelector(C.T)?.innerText.trim()||document.title.split(" - ")0;const{res}=Array.from(document.querySelectorAll(C.S)).reduce((acc,l)=>{const is2=l.querySelector(C.H2),is3=l.querySelector(C.H3);if(!is2&&!is3)return acc;const id=l.id.replace(/^L/,""),txt=l.innerText.trim();if(is2){acc.h2++;acc.h3=1;acc.res.push(`> ${acc.h2}. ${txt}: ${t}#${id}%60)}else{acc.res.push(%60> \t${acc.h2}.${acc.h3} ${txt}: ${t}#${id}%60);acc.h3++}return acc},{h2:0,h3:1,res:[]});if(res.length){const d=document.createElement("div"),a=document.createElement("textarea"),b=document.createElement("button");Object.assign(d.style,{position:"fixed",top:0,left:0,width:"100%",height:"100%",zIndex:2147483647,background:"rgba(0,0,0,0.7)",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"});Object.assign(a.style,{width:"85%",height:"75%",padding:"15px",fontSize:"14px",fontFamily:"monospace",whiteSpace:"pre",tabSize:4});Object.assign(b.style,{marginTop:"10px",padding:"10px 30px",cursor:"pointer",border:"none",borderRadius:"4px",background:"#fff",fontWeight:"bold"});a.value=res.join("\n");b.innerText="Close";const f=()=>{d.remove()};d.onclick=e=>{if(e.target===d)f()};b.onclick=f;d.appendChild(a);d.appendChild(b);document.body.appendChild(d);a.select()}else{alert("見出しが見つかりませんでした。一度ページ下部までスクロールしてから再実行してください。")}})(); たとえば
aaaaaaaaaa
こんな感じの
bbbbbbbbb
cccccccccc
ページがあったとすると
ddddddddd
生成される ToC は
以下のようになる
ページ内リンクが無駄に長くなるのは Cosense の仕様上どうしようもない
はず